package com.sojson.entity.po;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.sojson.base.impl.BaseDto;
import com.sojson.enums.core.EGeneralStatus;
import com.sojson.util.DateUtil;
import com.sojson.util.id.GUIDUtil;
import com.sojson.util.token.TokenUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiModelProperty.AccessMode;

/**
 * 商品表Bean
 * 
 * @author liu
 * @date 2021-03-16
 */
@ApiModel("商品表Bean")
public class Goods extends BaseDto {

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    private static final long serialVersionUID = 1615864295531L;

    @ApiModelProperty("用户编号")
    private String userNo;
    @ApiModelProperty("商品名称")
    private String goodName;
    @ApiModelProperty("缩略图")
    private String thumb;
    @ApiModelProperty("详情轮播图，多个是用英文逗号拼接")
    private String images;
    @ApiModelProperty("短标题")
    private String shortTitle;
    @ApiModelProperty("简单描述")
    private String goodDes;
    @ApiModelProperty("租赁说明")
    private String leaseDes;
    @ApiModelProperty("所属分类ID")
    private Integer cateId;
    @ApiModelProperty("是否推荐 1:是,2:否")
    private Integer isRem;
    @ApiModelProperty("分类层级ID,多个是用英文逗号隔开")
    private String cascaderVals;
    @ApiModelProperty("商品标签，多个使用英文逗号分隔")
    private String goodTags;
    @ApiModelProperty("单价，租赁单价")
    private BigDecimal price;
    @ApiModelProperty("原价")
    private BigDecimal originalPrice;
    @ApiModelProperty("库存")
    private Integer stock;
    @ApiModelProperty("保证金")
    private BigDecimal deposit;
    @ApiModelProperty("分成金额(0-99)")
    private Integer percentageTotal;
    @ApiModelProperty("详情介绍")
    private String detail;
    @ApiModelProperty("重量：克 备用字段")
    private Double weight;
    @ApiModelProperty("单位，备用字段")
    private String goodUnit;
    @ApiModelProperty("起租天数")
    private Integer rentDays;
    @ApiModelProperty("规格列表,多个使用英文逗号拼接")
    private String specsIds;
    @ApiModelProperty("状态 1启用 2禁用")
    private Integer status;
    @ApiModelProperty("销量")
    private Long sales;
    @ApiModelProperty("评论数量")
    private Long commentCount;
    @ApiModelProperty("好评数量")
    private Long commentGoodCount;
    @ApiModelProperty("星级")
    private Float starLevel;
    @ApiModelProperty("排序越大越靠前")
    private Integer sortNum;
    @ApiModelProperty("创建时间")
    private Date createdAt;
    @ApiModelProperty("更新时间")
    private Date updatedAt;
    @ApiModelProperty("商品分类名称")
    private String goodCateName;
    @ApiModelProperty(value = "商品标签ID集合", accessMode = AccessMode.READ_ONLY)
    private String[] goodTagIds;
    @ApiModelProperty(value = "商品规格组合", accessMode = AccessMode.READ_ONLY)
    private GoodSpecs goodSpecs;
    @ApiModelProperty(value = "商品规格集合", accessMode = AccessMode.READ_ONLY)
    private List<SpecsCate> specsCates;
    @ApiModelProperty(value = "商品规格组合集合", accessMode = AccessMode.READ_ONLY)
    private List<GoodSpecs> goodSpecss;
    /** 商品表集合 */
    private List<Integer> ids;
    /** 商品表集合 */
    private List<Goods> goodss;

    /**
     * 以上由工具自动生成，以下为手动添加
     */

       /**
        * Empty constructor
        */
    public Goods() {

    }

    /**
     * 此文件由工具自动生成，手动添加内容请放至末尾
     */

    /**
     * 获取用户编号
     * 
     * @return
     */
    public String getUserNo() {
        return userNo;
    }

    /**
     * 设置用户编号
     * 
     * @param userNo
     */
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }

    /**
     * 获取 商品名称
     */
    public String getGoodName() {
        return goodName;
    }

    /**
     * 设置 商品名称
     */
    public void setGoodName(String goodName) {
        this.goodName = goodName;
    }

    /**
     * 获取 缩略图
     */
    public String getThumb() {
        return thumb;
    }

    /**
     * 设置 缩略图
     */
    public void setThumb(String thumb) {
        this.thumb = thumb;
    }

    /**
     * 获取 详情轮播图，多个是用英文逗号拼接
     */
    public String getImages() {
        return images;
    }

    /**
     * 设置 详情轮播图，多个是用英文逗号拼接
     */
    public void setImages(String images) {
        this.images = images;
    }

    /**
     * 获取 短标题
     */
    public String getShortTitle() {
        return shortTitle;
    }

    /**
     * 设置 短标题
     */
    public void setShortTitle(String shortTitle) {
        this.shortTitle = shortTitle;
    }

    /**
     * 获取 简单描述
     */
    public String getGoodDes() {
        return goodDes;
    }

    /**
     * 设置 简单描述
     */
    public void setGoodDes(String goodDes) {
        this.goodDes = goodDes;
    }

    /**
     * 获取租赁说明
     * 
     * @return
     */
    public String getLeaseDes() {
        return leaseDes;
    }

    /**
     * 设置租赁说明
     * 
     * @param leaseDes
     */
    public void setLeaseDes(String leaseDes) {
        this.leaseDes = leaseDes;
    }

    /**
     * 获取 所属分类ID
     */
    public Integer getCateId() {
        return cateId;
    }

    /**
     * 设置 所属分类ID
     */
    public void setCateId(Integer cateId) {
        this.cateId = cateId;
    }

    /**
     * 获取是否推荐 1:是,2:否
     * 
     * @return
     */
    public Integer getIsRem() {
        return isRem;
    }

    /**
     * 设置是否推荐 1:是,2:否
     * 
     * @param isRem
     */
    public void setIsRem(Integer isRem) {
        this.isRem = isRem;
    }

    /**
     * 获取 分类层级ID,多个是用英文逗号隔开
     */
    public String getCascaderVals() {
        return cascaderVals;
    }

    /**
     * 设置 分类层级ID,多个是用英文逗号隔开
     */
    public void setCascaderVals(String cascaderVals) {
        this.cascaderVals = cascaderVals;
    }

    /**
     * 获取 商品标签，多个使用英文逗号分隔
     */
    public String getGoodTags() {
        return goodTags;
    }

    /**
     * 设置 商品标签，多个使用英文逗号分隔
     */
    public void setGoodTags(String goodTags) {
        this.goodTags = goodTags;
    }

    /**
     * 获取商品分类名称
     * 
     * @return
     */
    public String getGoodCateName() {
        return goodCateName;
    }

    /**
     * 设置商品分类名称
     * 
     * @param goodCateName
     */
    public void setGoodCateName(String goodCateName) {
        this.goodCateName = goodCateName;
    }

    /**
     * 获取商品标签ID集合
     * 
     * @return
     */
    public String[] getGoodTagIds() {
        return goodTagIds;
    }

    /**
     * 设置商品标签ID集合
     * 
     * @param goodTagIds
     */
    public void setGoodTagIds(String[] goodTagIds) {
        this.goodTagIds = goodTagIds;
    }

    /**
     * 获取 单价，租赁单价
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * 设置 单价，租赁单价
     */
    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    /**
     * 获取 原价
     */
    public BigDecimal getOriginalPrice() {
        return originalPrice;
    }

    /**
     * 设置 原价
     */
    public void setOriginalPrice(BigDecimal originalPrice) {
        this.originalPrice = originalPrice;
    }

    /**
     * 获取 库存
     */
    public Integer getStock() {
        return stock;
    }

    /**
     * 设置 库存
     */
    public void setStock(Integer stock) {
        this.stock = stock;
    }

    /**
     * 获取 保证金
     */
    public BigDecimal getDeposit() {
        return deposit;
    }

    /**
     * 设置 保证金
     */
    public void setDeposit(BigDecimal deposit) {
        this.deposit = deposit;
    }

    /**
     * 获取 分成金额(0-99)
     */
    public Integer getPercentageTotal() {
        return percentageTotal;
    }

    /**
     * 设置 分成金额(0-99)
     */
    public void setPercentageTotal(Integer percentageTotal) {
        this.percentageTotal = percentageTotal;
    }

    /**
     * 获取 详情介绍
     */
    public String getDetail() {
        return detail;
    }

    /**
     * 设置 详情介绍
     */
    public void setDetail(String detail) {
        this.detail = detail;
    }

    /**
     * 获取 重量：克 备用字段
     */
    public Double getWeight() {
        return weight;
    }

    /**
     * 设置 重量：克 备用字段
     */
    public void setWeight(Double weight) {
        this.weight = weight;
    }

    /**
     * 获取 单位，备用字段
     */
    public String getGoodUnit() {
        return goodUnit;
    }

    /**
     * 设置 单位，备用字段
     */
    public void setGoodUnit(String goodUnit) {
        this.goodUnit = goodUnit;
    }

    /**
     * 获取 起租天数
     */
    public Integer getRentDays() {
        return rentDays;
    }

    /**
     * 设置 起租天数
     */
    public void setRentDays(Integer rentDays) {
        this.rentDays = rentDays;
    }

    /**
     * 获取 规格列表,多个使用英文逗号拼接
     */
    public String getSpecsIds() {
        return specsIds;
    }

    /**
     * 设置 规格列表,多个使用英文逗号拼接
     */
    public void setSpecsIds(String specsIds) {
        this.specsIds = specsIds;
    }

    /**
     * 获取 状态 1启用 2禁用
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * 设置 状态 1启用 2禁用
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     * 获取 排序越大越靠前
     */
    public Integer getSortNum() {
        return sortNum;
    }

    /**
     * 设置 排序越大越靠前
     */
    public void setSortNum(Integer sortNum) {
        this.sortNum = sortNum;
    }

    /**
     * 获取销量
     * 
     * @return
     */
    public Long getSales() {
        return sales;
    }

    /**
     * 设置销量
     * 
     * @param sales
     */
    public void setSales(Long sales) {
        this.sales = sales;
    }

    /**
     * 获取评论数量
     * 
     * @return
     */
    public Long getCommentCount() {
        return commentCount;
    }

    /**
     * 设置评论数量
     * 
     * @param commentCount
     */
    public void setCommentCount(Long commentCount) {
        this.commentCount = commentCount;
    }

    /**
     * 获取好评数量
     * 
     * @return
     */
    public Long getCommentGoodCount() {
        return commentGoodCount;
    }

    /**
     * 设置好评数量
     * 
     * @param commentGoodCount
     */
    public void setCommentGoodCount(Long commentGoodCount) {
        this.commentGoodCount = commentGoodCount;
    }

    /**
     * 获取星级
     * 
     * @return
     */
    public Float getStarLevel() {
        return starLevel;
    }

    /**
     * 设置星级
     * 
     * @param starLevel
     */
    public void setStarLevel(Float starLevel) {
        this.starLevel = starLevel;
    }

    /**
     * 获取 创建时间
     */
    public Date getCreatedAt() {
        return createdAt;
    }

    /**
     * 设置 创建时间
     */
    public void setCreatedAt(Date createdAt) {
        this.createdAt = createdAt;
    }

    /**
     * 获取 更新时间
     */
    public Date getUpdatedAt() {
        return updatedAt;
    }

    /**
     * 设置 更新时间
     */
    public void setUpdatedAt(Date updatedAt) {
        this.updatedAt = updatedAt;
    }

    /**
     * 获取商品规格组合
     * 
     * @return
     */
    public GoodSpecs getGoodSpecs() {
        return goodSpecs;
    }

    /**
     * 设置商品规格组合
     * 
     * @param goodSpecs
     */
    public void setGoodSpecs(GoodSpecs goodSpecs) {
        this.goodSpecs = goodSpecs;
    }

    /**
     * 获取 商品表集合
     */
    public List<Integer> getIds() {
        return ids;
    }

    /**
     * 设置 商品表集合
     */
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

    /**
     * 获取 商品表集合
     */
    public List<Goods> getGoodss() {
        return goodss;
    }

    /**
     * 设置 商品表集合
     */
    public void setGoodss(List<Goods> goodss) {
        this.goodss = goodss;
    }

    /**
     * 获取商品规格集合
     * 
     * @return
     */
    public List<SpecsCate> getSpecsCates() {
        return specsCates;
    }

    /**
     * 设置商品规格集合
     * 
     * @param specsCates
     */
    public void setSpecsCates(List<SpecsCate> specsCates) {
        this.specsCates = specsCates;
    }

    /**
     * 以上由工具自动生成，以下为手动添加
     */

    /**
     * 获取商品规格组合表集合
     * 
     * @return
     */
    public List<GoodSpecs> getGoodSpecss() {
        return goodSpecss;
    }

    /**
     * 设置商品规格组合表集合
     * 
     * @param goodSpecss
     */
    public void setGoodSpecss(List<GoodSpecs> goodSpecss) {
        this.goodSpecss = goodSpecss;
    }

    /**
     * 插入初始化
     * @throws IOException 
     */
    public void insertInit() throws IOException {
        setNo(GUIDUtil.generateGuid());
        setUserNo(TokenUtil.getUserNo());
        setCommentCount(0L);
        setCommentGoodCount(0L);
        setStarLevel(5.0F);
        setSales(0L);
        setStatus(EGeneralStatus.NORMAL.getCode());
        Date now = DateUtil.nowDate();
        setCreatedAt(now);
        setUpdatedAt(now);
    }

    /**
     * 更新初始化
     */
    public void updateInit() {
        Date now = DateUtil.nowDate();
        setUpdatedAt(now);
    }

    /**
     * 更新初始化
     */
    public void setUpdateNull() {
        setStatus(null);
    }

}